package cnsatmsmart.automation.mmi.model.data.component;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
 *
 * @author SIK - PTIK, BPPT
 */
public class JTextFieldFilter extends PlainDocument {
    /* konstanta */
        /**
         * konstanta character dalam mode uppercase
         */
        public static final String UPPERCASE  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        /**
         * konstanta character angka
         */
        public static final String NUMERIC = "0123456789";
        /**
         * konstanta character angka ditambah karakter '.'
         */
        public static final String FLOAT = NUMERIC + ".";
        /**
         * konstanta karakter uppercase dan numeric
         */
        public static final String ALPHA_NUMERIC = UPPERCASE + NUMERIC;

   /* atribut - atribut yang dimiliki oleh kelas JTextFieldFilter */
        /**
         * String yang bisa diketikkan
         */
        protected String acceptedChars = null;

    /**
     * constructor - default constructor dengan acceptedCharsnya adalah ALPHA_NUMERIC
     */
        public JTextFieldFilter(){
            this(ALPHA_NUMERIC);
        }

    /**
     * constructor - user defined constructor
     * @param acceptedchars string yang bisa diketikkan
     */
        public JTextFieldFilter(String acceptedchars){
            this.acceptedChars = acceptedchars;
        }

   /* method - method lain yang dimiliki oleh kelas JTextFieldFilter */
        @Override
        public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
            if (str == null) return;

            if (acceptedChars.equals(UPPERCASE))   //bila sama dengan UPPERCASE
                str = str.toUpperCase();
            
            for (int i=0; i<str.length(); ++i){
                if (acceptedChars.indexOf(str.valueOf(str.charAt(i))) == -1)
                    return;
            }

            if (acceptedChars.equals(FLOAT)){    //bila sama dengan FLOAT
                if (str.indexOf(".") != -1)
                {
                    if (getText(0,getLength()).indexOf(".") != -1)
                        return;
                }
            }
            super.insertString(offset, str, attr);
        }
}